package com.yuesystem.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuesystem.common.R;
import com.yuesystem.dto.responsebody.BlogCheckResponseBody;
import com.yuesystem.dto.responsebody.BlogDetailResponseBody;
import com.yuesystem.dto.responsebody.BrowseHistoryResponseBody;
import com.yuesystem.dto.responsebody.CollectBlogResponseBody;
import com.yuesystem.dto.responsebody.CommentResponseBody;
import com.yuesystem.dto.responsebody.LikeResponseBody;
import com.yuesystem.entity.Feedback;
import com.yuesystem.service.BlogService;
import com.yuesystem.service.BrowseHistoryService;
import com.yuesystem.service.FeedbackService;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 论坛+反馈后台类.
 */
@RestController
@CrossOrigin
@RequestMapping("/back")
@Slf4j
public class BackendController {
  @Autowired
  private BlogService blogService;

  @Autowired
  private BrowseHistoryService browseHistoryService;

  @Autowired
  private FeedbackService feedbackService;

  /**
   * 分页展示我的收藏.
   *
   * @param page 起始页
   * @param pageSize 页数
   * @param startTime 开始时间
   * @param endTime 结束时间
   * @return 我的收藏
   */
  @GetMapping("/collect")
  public R<Page<CollectBlogResponseBody>> getPage(int page, int pageSize,
                                                  String startTime, String endTime) {
    Page<CollectBlogResponseBody> pageInfo = blogService.getPageMyCollect(
        page, pageSize, startTime, endTime);
    return R.success(pageInfo);
  }

  /**
   * 分页查看别人对我的帖子的收藏.
   *
   * @param page 起始页
   * @param pageSize 页数
   * @return 收藏帖子类的分页形式
   */
  @GetMapping("/heCollectMe")
  public R<Page<CollectBlogResponseBody>> getPageCollectMy(int page, int pageSize) {
    Page<CollectBlogResponseBody> pageInfo = blogService.getPageCollectMy(page, pageSize);
    return R.success(pageInfo);
  }

  /**
   * 分页查看别人对我的帖子的点赞.
   *
   * @param page 起始页
   * @param pageSize 页数
   * @return 点赞相应类的分页形式
   */
  @GetMapping("/heLikeMe")
  public R<Page<LikeResponseBody>> getPageLikeMy(int page, int pageSize) {
    Page<LikeResponseBody> pageInfo = blogService.getPageLikeMy(page, pageSize);
    return R.success(pageInfo);
  }

  /**
   * 用户获取发布的反馈.
   *
   * @param page 起始页
   * @param pageSize 页数
   * @return 反馈类的分页形式
   */
  @GetMapping("/myfeedback")
  public R<Page<Feedback>> getMyFeedback(int page, int pageSize) {
    Page<Feedback> pageInfo = feedbackService.getMyFeedback(page, pageSize);
    return R.success(pageInfo);
  }

  /**
   * 分页查看别人对我的帖子的评论.
   *
   * @param page 起始页
   * @param pageSize 页数
   * @return 评论响应类的分页形式
   */
  @GetMapping("/heCommentMe")
  public R<Page<CommentResponseBody>> getPageCommentMy(int page, int pageSize) {
    Page<CommentResponseBody> pageInfo = blogService.getPageCommentMy(page, pageSize);
    return R.success(pageInfo);
  }

  /**
   * 前台传帖子id.和token，后台记录此条用户浏览记录.
   *
   * @param blogId 帖子id
   * @return 记录成功与否
   */
  @PostMapping("/currentBrowse")
  public R<String> currentBrowse(@RequestParam Long blogId) {
    browseHistoryService.currentBrowse(blogId);
    return R.success("已记录");
  }

  /**
   * 后台浏览历史.
   *
   * @return 浏览历史响应类的分页形式
   */
  @GetMapping("/history")
  public R<List<BrowseHistoryResponseBody>> browseHistory() {
    List<BrowseHistoryResponseBody> list = browseHistoryService.browseHistory();
    return R.success(list);
  }

  /**
   * 获取未审核帖子列表.
   *
   * @param page 起始页
   * @param pageSize 页数
   * @return 未审核帖子类的响应类
   */
  @RequestMapping("/checkList")
  public R<Page<BlogCheckResponseBody>> getCheckList(@RequestParam int page,
                                                     @RequestParam int pageSize) {
    return R.success(blogService.getCheckPage(page, pageSize));
  }

  /**
   * 获取管理员审核帖子展示类.
   *
   * @param id 帖子id
   * @return 审核帖子展示类.
   */
  @RequestMapping("/getBlogById")
  public R<BlogDetailResponseBody> getBlog(@RequestParam int id) {
    return R.success(blogService.getBlogDetail(id));
  }

  /**
   * 管理员审核帖子.
   *
   * @param button 按下哪个按钮（1-允许发布，0-禁止发布）
   * @param id 帖子id
   * @return 审核是否成功
   */
  @RequestMapping("/checkBlog")
  public R<String> getBlog(@RequestParam int button, @RequestParam int id) {
    //按下允许发布
    if (button == 1) {
      blogService.allowed(id);
      return R.success("允许发布");
    } else {
      blogService.refused(id);
      return R.error("禁止发布");
    }
  }

}
